from django.test import TestCase
import uuid
import random
from os import walk


from .utils import *
from .models import Tienda, GrupoTickets, Ticket, Precio

from .fixtures import fix_tienda, fix_ticket, fix_grupo_tickets


class CodigoDeBarrasTests(TestCase):
    
    def test_archivo_svg_generado(self):
        self.assertEqual(generarCodioDeBarras('1658361553005', STATIC_GENERATED_SVGS),
                         STATIC_GENERATED_SVGS + '1658361553005.svg')

class CodigoQrTests(TestCase):

    def test_imagen_codigo_qr(self):
        generado = generarCodigoQr("{ 'factura': 3321991, 'cod_control: 'qr-312' }", ruta=STATIC_GENERATED_SVGS)
        # comprobando creacion
        filenames = []
        [filenames.extend(fn) for (_,_,fn) in walk(STATIC_GENERATED_SVGS)]
        self.assertEqual(generado.split(os.sep)[-1] in filenames, True)

class TiendaTests(TestCase):
    ''' Clase de pruebas para Tiendas 
    '''
    @classmethod
    def setUpTestData(cls):
        cls.tienda = Tienda.objects.create(
            nombre='Donya Ederesilla',
            direccion = 'Calle #123 av noe',
            nit='30000001')
    
    def testCreate(self):
        # fixtures
        #tienda = fix_tienda
        self.tienda.save()
        self.assertIsNotNone(self.tienda)
        self.assertEqual(self.tienda.direccion, 'Calle #123 av noe')

class PrecioTests(TestCase):
    ''' Clase de pruebas para Precios de Tickets '''
    @classmethod
    def setUpTestData(cls):
        cls.precio = Precio.objects.create(
            costo_numeral=15.40,
            costo_literal='Quince con cuarenta')
        
    def testCreate(self):
        self.assertEqual(self.precio.costo_numeral, 15.40)
        self.assertEqual(self.precio.costo_literal,'Quince con cuarenta')

        
class GrupoTicketsTest(TestCase):
    ''' Clase de pruebas para Grupos de tickets
    '''
    @classmethod
    def setUpTestData(cls):
        cls.tienda = Tienda.objects.create(
            nombre='Donya Ederesilla',
            direccion = 'Calle #123 av noe',
            nit='30000001')
        cls.precio = Precio.objects.create(
            costo_numeral=15.40,
            costo_literal='Quince con cuarenta')
        cls.grupo_tickets = GrupoTickets.objects.create(
            tienda=cls.tienda,
            precio=cls.precio,
            inicio_nro_factura=1,
            desc_producto='General entrada',
            cod_control_inicio='G-0',
            nro_tickets=3
            )
        
    def testCreate(self):
        self.assertEqual(self.grupo_tickets.tienda, self.tienda)
        self.assertEqual(self.precio, self.grupo_tickets.precio)

    def testCrearTickets(self):
        ids = self.grupo_tickets.CrearTickets()
        self.assertNotEqual(len(ids), 0)
        for id in ids:
            self.assertEqual(Ticket.objects.all().filter(id=id).count(), 1)
            ticket = Ticket.objects.get(id=id)
            self.assertIsInstance(ticket, Ticket)

    def testGenerarPdf(self):
        # creating objects
        ids = self.grupo_tickets.CrearTickets()
        self.assertNotEqual(len(ids), 0)
        for id in ids:
            self.assertEqual(Ticket.objects.all().filter(id=id).count(), 1)
            ticket = Ticket.objects.get(id=id)
            print (ticket)
            self.assertIsInstance(ticket, Ticket)

        pdf_unico = self.grupo_tickets.GenerarPdf()
        print ("pdf unico:"+pdf_unico)
        self.assertIsNotNone(pdf_unico)
        self.assertEqual(pdf_unico.split('/')[-1], self.grupo_tickets.cod_control_inicio+'.pdf')

        
class TicketTests(TestCase):
    ''' Clase para pruebas de tickets
    '''
    @classmethod
    def setUpTestData(cls):
        cls.tienda = Tienda.objects.create(
            nombre='Donya Ederesilla',
            direccion = 'Calle #123 av noe',
            nit='50000000')
        cls.precio = Precio.objects.create(
            costo_numeral=40.00,
            costo_literal='Cuarenta')
        cls.grupo_tickets = GrupoTickets.objects.create(
            tienda=cls.tienda,
            precio=cls.precio,
            inicio_nro_factura=1,
            desc_producto='General entrada',
            cod_control_inicio='GT-1',
            nro_tickets=2
            )
        cls.ticket=Ticket.objects.create(
            grupo_tickets=cls.grupo_tickets,
            nro_factura=1)
        
    def testCreate(self):
        print (self.ticket)
        self.assertIsNotNone(self.ticket)
        self.assertEqual(self.ticket.grupo_tickets, self.grupo_tickets)

    # def testGenerarSVG(self):
    #     self.assertEqual(self.ticket.GenerarSvg(),
    #                      'static/tickets/generated/'+self.ticket.codigo_de_barras+'.svg')

    # def testGenerarPDF(self):
    #     self.assertEqual(self.ticket.GenerarPdf(),
    #                      'static/tickets/generated/'+self.ticket.codigo_de_barras+'.svg.pdf')
    

    
        

    
